#!/usr/bin/env python
# coding: utf-8

# ## 目标：实现一个翻译小程序
# * 可以查询单词
# * 可以自定义单词和解释
# * 可以删除单词
# ## 知识点
# * dict 字典
# {'键':'值'} 表示能通过键找到对应的值
# * set 集合
# * tuple 元组

# ## dict
# * why
# 
# * what
# 
# * how
# 
# * data-->增删改查
# 
# ### 增

# In[7]:


# dict，新建字典，大括号用于字典
my_dict = {'键1': '值1', # 键相当于页码，直接能映射到相应的值
           '键2': '值2',
           '键3': 2,
          '键4': 3}  # 键的设置唯一，不能有重复，设置后不能改变


# In[8]:


my_dict


# In[24]:


information = {'姓名': '罗翔',
                      '性别': '男',
                      '年龄': 28,
                     '所在地': '保山'}


# In[25]:


information['年龄']  # 获取键对应的值，和列表类似


# In[19]:


information.get('lx')  # 没有这个键，返回None


# In[22]:


information.get('lx', 'hahaha')  # 没有这个键，返回后面这个默认值


# In[21]:


information.get('性别')


# In[27]:


# 加入新的 键：值
information['生日'] = '7月23日'


# In[28]:


information


# In[35]:


information['关系'] = ['父亲', '母亲', '配偶'] # 可以键(嵌)入列表


# In[31]:


information


# In[37]:


book = {'name': 'python',
       'price': 100}
book


# ### 字典里可以追加字符串，数字，列表，字典

# In[39]:


information['book'] = book
information


# ### 删

# In[40]:


del information['所在地']  # 删除 输入的键及值
information


# ### 改

# In[42]:


information['年龄'] = '你猜'
information


# In[43]:


information['姓名'] = 'lx'  # 重新给键赋值，把前面字典对应的键当做一个变量
information


# ### 查

# In[44]:


information['book']  # 查询键book的值，对应的book这个字典


# In[48]:


information['book']['price']  # 进一步查询book字典里的信息


# In[49]:


information.keys()  # 查询字典(所有)的键


# In[51]:


[i for i in information.keys()]  # 将keys里的值依次取出赋予变量i，并将i构成一个列表


# In[57]:


information.items()  # 在字典比较复杂，键值比较多时，想要看清每个元组


# In[62]:


for item in information.items():
    print(item, end = ' ')


# In[63]:


for key, value in information.items():
    print(f'{key}:{value}')  # print('{}:{}', format(key,value))
    #K->V编程论的由来


# ## tuple 元组
# ### why？
# * 生活中的元组：地图坐标，立体图形，3D建模
# * 在各种计算中，表示成对，成组的数据
# ### what?
# * 元组就是多个元素组成的组(队),一个元素为一元组，后必须加逗号，两个元素为二元组，三个元素为三元组。。。形式如下：

# In[2]:


cor = 23,45  # 逗号分隔就是数组，还有种形式:cor = (23,45)
type(cor)


# ### how?
# ### 元组就是用来建立那些不常变的，成对的，基础的数据

# In[6]:


# 不可变
ip_port = ('192.168.1.2', 8001)


# In[34]:


host = {}


# In[9]:


host['ip_port'] = ip_port
host


# In[10]:


host['ip_port'][0]  # 当元组放入字典后，可视为序列，拥有索引，可进行查询


# In[16]:


ip = ('192.168.1.6',)  # 一个元素时，加逗号才能成为元组
type(ip)


# In[19]:


# 元组可用作字典的键
host[ip] = 'address'
host


# In[35]:


# tuple和list的相互转换
names = ['lilei', 'hanmeimei', 'xiaoming']
type(names)


# In[22]:


tuple(names)


# In[39]:


list(tuple(names))  # 看代码遵循，从里往外看


# In[40]:


host[names] = 'admin'  # 不能用列表作为键值
host


# ## set 集合
# ### 不重复的元素

# In[70]:


numbers = {1, 5, 6, 7, 3, 8, 9, 4, 2, 5, 8, 0, 3}
type(numbers)


# In[47]:


numbers  # 即使输入时有重复，输出时会自动删除重复数据


# In[48]:


numbers[0]  # 集合没有顺序，不是序列，不能使用索引


# In[72]:


# for循环依次调出numbers里的值
for i in numbers:
    print(i)


# In[75]:


# set和list间相互转换
list1 = list(numbers)
print(list1)


# In[76]:


set(list1)


# In[77]:


len(numbers)   # 表示元素个数


# In[ ]:




